package org.jsola.contract.service;

import org.jsola.contract.dto.SignWeiXinSendDTO;
import org.jsola.contract.entity.AppendixDO;
import org.jsola.contract.entity.ContractDO;
import org.jsola.contract.entity.PartySignDO;
import org.jsola.contract.vo.PartySignAccountVO;
import org.jsola.user.core.TokenUser;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * 注入时需要添加 @Qualifier注解标明使用哪个
 *
 * @author JanusMix
 */
public interface IContractSignCallbackService {

    /**
     * 发起签署回调函数
     *
     * @param contractDO           待签署合同对象
     * @param partySignAccountList 签署方账户信息list
     * @param appendixDO           合同附件对象
     * @param tokenUser            当前登录用户，发起合同的人
     */
    void onPublish(ContractDO contractDO, List<PartySignAccountVO> partySignAccountList, AppendixDO appendixDO, TokenUser tokenUser);

    /**
     * 合同签署成功回调函数，单方即调用
     *
     * @param contractDO           已签署合同对象
     * @param partySignAccountList 签署方账户信息list
     * @param appendixDO           合同附件对象
     * @param tokenUser            当前登录用户，签署合同的人
     */
    void onSuccess(ContractDO contractDO, List<PartySignAccountVO> partySignAccountList, AppendixDO appendixDO, TokenUser tokenUser);

    /**
     * 合同签署完成回调函数
     *
     * @param contractDO           已签署合同对象
     * @param partySignAccountList 签署方账户信息list
     * @param appendixDO           合同附件对象
     * @param tokenUser            当前登录用户，签署合同的人
     */
    void onComplete(ContractDO contractDO, List<PartySignAccountVO> partySignAccountList, AppendixDO appendixDO, TokenUser tokenUser);


    /**
     * 合同已过期回调函数
     *
     * @param contractList 已签署合同对象列表
     */
    void onExpired(List<ContractDO> contractList);

    /**
     * 合同签署失败回调函数
     *
     * @param contractDO 待签署合同对象
     */
    void onFailed(ContractDO contractDO, String message, TokenUser tokenUser);

    /**
     * 发信息回调
     *
     * @param sendList    发送参数
     * @param subjectName 用工单位名称
     * @param tokenUser   当前用户
     */
    void sendMessage(List<SignWeiXinSendDTO> sendList, String subjectName, TokenUser tokenUser);
}
